# 10장 컨피그맵
Assembled by GimunLee
# 컨피그맵 개념
- 컨피그맵은 컨테이너에 필요한 환경 설정을 컨테이너와 분리해서 제공하는 기능
- 다른 설정으로 컨테이너를 실행할 때 사용
- 컨피그맵을 컨테이너와 분리하면 컨테이너 하나를 개발용, 상용 서비스를 운영하기 전 보안이나 성능 장애 등을 검증하는 스테이지용, 상용 서비스용으로 사용 가능
# 컨피그맵 사용하기
apiVersion: v1
kind: ConfigMap
metadata:
name: config-dev
namespace: default
data:
DB_URL: localhost
DB_USER: myuser
DB_PASS: mypass
DEBUG_INFO: debug
- .data의 하위 필드로 실제 사용하려는 환경 설정값을 작성
# 컨피그맵 설정 중 일부만 불러와서 사용
- 컨피그맵의 일부 설정만 불러오는 디플로이먼트와 NodePort 타입 서비스가 포함된 템플릿 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: configapp
labels:
app: configapp
spec:
replicas: 1
selector:
matchLabels:
app: configapp
template:
metadata:
labels:
app: configapp
spec:
containers:
- name: testapp
image: arisu1000/simple-container-app:latest
ports:
- containerPort: 8080
env:
- name: DEBUG_LEVEL # 환경 변숫값
valueFrom: # 어디에서 가져올 것인지
configMapKeyRef: # 어떤 키를 가져올 것인지
name: config-dev
key: DEBUG_INFO # value: 'debug'
---
apiVersion: v1
kind: Service
metadata:
labels:
app: configapp
name: configapp-svc
namespace: default
spec:
ports:
- nodePort: 30800
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: configapp
type: NodePort
# 컨피그맵 설정 전체를 한꺼번에 불러와서 사용하기
- 컨피그맵 설정 전체를 한꺼번에 컨테이너의 환경 변수로 설정하는 디플로이먼트의 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: configapp
labels:
app: configapp
spec:
replicas: 1
selector:
matchLabels:
app: configapp
template:
metadata:
labels:
app: configapp
spec:
containers:
- name: testapp
image: arisu1000/simple-container-app:latest
ports:
- containerPort: 8080
envFrom: # 환경 변수를 어디에서 가져올 것인지
- configMapRef: # 어떤 컨피그맵을 참조해서 환경 변수들을 불러올 것인지
name: config-dev
# name: config-prod
---
apiVersion: v1
kind: Service
metadata:
labels:
app: configapp
name: configapp-svc
namespace: default
spec:
ports:
- nodePort: 30800
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: configapp
type: NodePort
# 컨피그맵을 볼륨에 불러와서 사용하기
- 컨테이너의 볼륨 형식으로 컨피그맵을 설정해서 파일로 컨테이너에 제공
apiVersion: apps/v1
kind: Deployment
metadata:
name: configapp
labels:
app: configapp
spec:
replicas: 1
selector:
matchLabels:
app: configapp
template:
metadata:
labels:
app: configapp
spec:
containers:
- name: testapp
image: arisu1000/simple-container-app:latest
ports:
- containerPort: 8080
volumeMounts:
- name: config-volume # 해당 이름의 볼륨을 만들어서 컨피그맵의 하위 필드를
mountPath: /etc/config # 디렉터리에 필드 이름 형태의 파일로 저장 (KEY: 파일 이름 / value: 파일 내용)
volumes: # 생성한 볼륨을 사용하는 컨피그맵 설정
- name: config-volume
configMap:
name: config-dev
---
apiVersion: v1
kind: Service
metadata:
labels:
app: configapp
name: configapp-svc
namespace: default
spec:
ports:
- nodePort: 30800
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: configapp
type: NodePort
# Referenses
- 쿠버네티스 입문 - 90가지 예제로 배우는 컨테이너 관리 자동화 표준 / 동양북스
← 레이블과 애너테이션 11장 시크릿 →